home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / akcl / akcl1615.lha / mp / mp_addmul.c < prev    next >
C/C++ Source or Header  |  1991-02-05  |  440b  |  21 lines

  1. #include "include.h"
  2. #include "arith.h"  
  3. /*
  4.    (h = hiremainder, y = addmul(a,b), hiremainder:y == a*b + h) is true
  5. */
  6.  
  7. int addmul(x,y)
  8.      ulong x,y;
  9. {
  10.   ulong xlo,xhi,ylo,yhi;
  11.   ulong z,z2; TEMPVARS
  12.  
  13.   xlo=x&65535;xhi=x>>16;ylo=y&65535;yhi=y>>16;
  14.   z=addll(xlo*yhi,xhi*ylo);
  15.   z2=(overflow)?xhi*yhi+65536+(z>>16):xhi*yhi+(z>>16);
  16.   z=addll(xlo*ylo,(z<<16));z2+=overflow;
  17.   z=addll(z,hiremainder);hiremainder=z2+overflow;
  18.   return z;
  19. }
  20.  
  21.